//package com.lis.scf.service;
//
//import com.example.rbac.common.dto.MenuDTO;
//import com.example.rbac.common.enums.CompanyType;
//import com.example.rbac.entity.Menu;
//import com.example.rbac.entity.Permission;
//import com.example.rbac.entity.User;
//import com.example.rbac.repository.MenuRepository;
//import com.example.rbac.repository.UserRepository;
//import lombok.RequiredArgsConstructor;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * 菜单服务类，用于获取用户可访问的菜单
// */
//@Service
//@RequiredArgsConstructor
//public class MenuService {
//
//    private final MenuRepository menuRepository;
//    private final UserRepository userRepository;
//
//    /**
//     * 获取当前登录用户的菜单列表
//     */
//    public List<MenuDTO> getUserMenus() {
//        // 获取当前登录用户名
//        String username = SecurityContextHolder.getContext().getAuthentication().getName();
//
//        // 查询用户信息
//        User user = userRepository.findByUsername(username)
//                .orElseThrow(() -> new RuntimeException("用户不存在"));
//
//        // 获取用户拥有的所有权限ID
//        List<Long> permissionIds = user.getRoles().stream()
//                .flatMap(role -> role.getPermissions().stream())
//                .map(Permission::getPermissionId)
//                .collect(Collectors.toList());
//
//        // 查询用户可访问的菜单
//        List<Menu> menus = menuRepository.findByPermissionIdsAndCompanyType(
//                permissionIds,
//                user.getCompany().getCompanyType()
//        );
//
//        // 构建菜单树
//        return buildMenuTree(menus);
//    }
//
//    /**
//     * 构建菜单树结构
//     */
//    private List<MenuDTO> buildMenuTree(List<Menu> menus) {
//        // 找出所有一级菜单
//        List<MenuDTO> rootMenus = menus.stream()
//                .filter(menu -> menu.getParentId() == 0)
//                .map(this::convertToDTO)
//                .collect(Collectors.toList());
//
//        // 为每个一级菜单添加子菜单
//        rootMenus.forEach(rootMenu -> {
//            rootMenu.setChildren(findChildren(rootMenu.getMenuId(), menus));
//        });
//
//        return rootMenus;
//    }
//
//    /**
//     * 查找子菜单
//     */
//    private List<MenuDTO> findChildren(Long parentId, List<Menu> menus) {
//        return menus.stream()
//                .filter(menu -> menu.getParentId().equals(parentId))
//                .map(menu -> {
//                    MenuDTO dto = convertToDTO(menu);
//                    // 递归查找子菜单
//                    dto.setChildren(findChildren(menu.getMenuId(), menus));
//                    return dto;
//                })
//                .collect(Collectors.toList());
//    }
//
//    /**
//     * 将实体转换为DTO
//     */
//    private MenuDTO convertToDTO(Menu menu) {
//        MenuDTO dto = new MenuDTO();
//        dto.setMenuId(menu.getMenuId());
//        dto.setMenuName(menu.getMenuName());
//        dto.setParentId(menu.getParentId());
//        dto.setPath(menu.getPath());
//        dto.setIcon(menu.getIcon());
//        dto.setSortOrder(menu.getSortOrder());
//        return dto;
//    }
//}
